-- 创建数据库
create database trig;

use trig;

-- 创建商品销售记录表
create table sell(
	id int identity(1,1) primary key,
	name varchar(10),
	price int,
	sale_time date
);

-- 创建日销售报表
create table ds_report(
	date_day varchar(20),
	sale int
);

-- 创建月销售报表
create table ms_report(
	date_month varchar(20),
	sale int
);

-- 创建年销售报表
create table ys_report(
	date_year varchar(20),
	sale int
);

-- 创建季度销售报表
create table qs_report(
	date_quarter varchar(20),
	sale int
);

-- 创建触发器，生成日销售报表
create trigger trigger_sell_day
on sell
for insert
as
begin

	declare @sale int;
	declare @sale_time varchar(20);
	-- 获取插入数据的购买时间
	set @sale_time = (select sale_time from inserted)
	-- 计算这一天的销售额
	set @sale = (select SUM(price) from sell where sale_time = @sale_time)
	
	
	-- 判断当前日期是否已经在日销售报表中存在
	if not exists(select * from ds_report where date_day = @sale_time)
		-- 不存在，则直接插入
		insert into ds_report values(@sale_time,@sale)
	else
		-- 存在，更新即可
		update ds_report set sale = @sale where date_day = @sale_time
end

-- 插入几条数据测试日销售报表
insert into sell values('瓜子',8,'2020-12-20');
insert into sell values('可乐',3,'2020-12-20');
insert into sell values('苹果',20,'2020-12-21');
insert into sell values('香蕉',10,'2020-12-21');

-- 查询日销售报表
select * from ds_report;

-- 创建触发器，生成月销售报表
create trigger trigger_sell_month
on sell
for insert
as
begin
	declare @sell int
	declare @sell_time varchar(20)
	declare @date_tmp varchar(50)
	-- 获取插入数据的购买时间
	set @sell_time = (select sale_time from inserted)
	-- 截取出购买时间的年份和月份
	set @date_tmp = datename(year,@sell_time) + '-' + datename(month,@sell_time)   
	-- 计算这一个月的销售额
	set @sell = (select SUM(price) from sell where sale_time like @date_tmp + '%')
	-- 判断月销售报表中是否存在当前月的数据
	if not exists(select * from ms_report where date_month = @date_tmp)
		-- 不存在，则插入
		insert into ms_report values(@date_tmp,@sell);
	else
		-- 存在，直接更新
		update ms_report set sale = @sell where date_month = @date_tmp
end

-- 插入几条数据测试月销售报表
insert into sell values('瓜子',8,'2020-12-20');
insert into sell values('可乐',3,'2020-12-20');
insert into sell values('苹果',20,'2020-11-21');
insert into sell values('香蕉',10,'2020-10-21');

-- 查询月销售报表
select * from ms_report;

-- 创建触发器，生成年销售报表
create trigger trigger_sell_year
on sell
for insert
as
begin
	declare @sell int
	declare @sell_time varchar(20)
	declare @date_tmp varchar(50)
	-- 获取插入数据的购买时间
	set @sell_time = (select sale_time from inserted)
	-- 截取时间中的年份
	set @date_tmp = datename(year,@sell_time)
	-- 计算这一年的销售额
	set @sell = (select SUM(price) from sell where sale_time like @date_tmp + '%')
	-- 判断年销售报表中是否有这一年的数据
	if not exists(select * from ys_report where date_year = @date_tmp)
		-- 不存在，则插入
		insert into ys_report values(@date_tmp,@sell)
	else
		-- 存在，则更新
		update ys_report set sale = @sell where date_year = @date_tmp
end

-- 插入几条数据测试年销售报表
insert into sell values('瓜子',8,'2020-12-20');
insert into sell values('可乐',3,'2020-12-20');
insert into sell values('苹果',20,'2019-11-21');

-- 查询年销售报表
select * from ys_report;

-- 创建触发器，生成季度销售报表
create trigger trigger_sell_qs
on sell
for insert
as
begin
	declare @sell int
	declare @sell_time varchar(20)
	declare @date_year varchar(20)
	declare @date_month int
	declare @date_qs int
	declare @date_tmp varchar(50)
	-- 获取插入数据的购买时间
	set @sell_time = (select sale_time from inserted)
	-- 截取时间中的年份和月份
	set @date_year = datename(year,@sell_time)
	set @date_month = datename(month,@sell_time)
	-- 拼接一个季度标识
	set @date_tmp = @date_year + '第' + convert(varchar(10),@date_month) + '季度'
	print(@date_tmp)
	-- 计算当前月份所在季度
	set @date_qs = (@date_month + 2) / 3
	if @date_qs = 1
		-- 计算第一季度的销售额
		set @sell = (select SUM(price) from sell where sale_time = @date_year + '-' + '0' + '[1-3]' + '%')
	else if @date_qs = 2
		-- 计算第二季度的销售额
		set @sell = (select SUM(price) from sell where sale_time = @date_year + '-' + '0' + '[4-6]' + '%')
	else if @date_qs = 3
		-- 计算第三季度的销售额
		set @sell = (select SUM(price) from sell where sale_time = @date_year + '-' + '0' + '[7-9]' + '%')
	else
		-- 计算第四季度的销售额
		set @sell = (select SUM(price) from sell where sale_time = @date_year + '-' + '1' + '[0-2]' + '%')
		
	-- 判断季度销售报表中是否已经有当前季度的数据
	if not exists(select * from qs_report where date_quarter = @date_tmp)
		-- 不存在，则插入
		insert into qs_report values(@date_tmp,@sell)
	else
		-- 存在，则更新
		update qs_report set sale = @sell where date_quarter = @date_tmp
end


-- 插入几条数据测试季度销售报表
insert into sell values('瓜子',8,'2020-12-20');
insert into sell values('可乐',3,'2020-12-20');
insert into sell values('苹果',20,'2019-01-21');
insert into sell values('苹果',20,'2019-02-21');

-- 查询季度销售报表
select * from qs_report;